import Vue from 'vue'
import {login, logout, phoneLogin, thirdLogin} from "@/api/login"
import {ACCESS_TOKEN, USER_NAME, USER_INFO, USER_AUTH, SYS_BUTTON_AUTH, UI_CACHE_DB_DICT_DATA, TENANT_ID,Authorization} from "@/store/mutation-types"
import {welcome} from "@/utils/util"
import {queryPermissionsByUser} from '@/api/api'
import {getAction} from '@/api/manage'


const user = {
    state: {
        token: '',
        userName: '',
        realName: '',
        tenantid: '',
        welcome: '',
        avatar: '',
        permissionList: [],
        info: {}
    },

    mutations: {
        SET_TOKEN: (state, token) => {
            state.token = token
        },
        SET_NAME: (state, {userName, realName, welcome}) => {
            state.userName = userName
            state.realName = realName
            state.welcome = welcome
        },
        SET_AVATAR: (state, avatar) => {
            state.avatar = avatar
        },
        SET_PERMISSIONLIST: (state, permissionList) => {
            state.permissionList = permissionList
        },
        SET_INFO: (state, info) => {
            console.log(state)
            state.info = info
        },
        SET_TENANT: (state, id) => {
            state.tenantid = id
        },
    },

    actions: {
        // CAS验证登录
        ValidateLogin({commit}, userInfo) {
            return new Promise((resolve, reject) => {
                getAction("/cas/client/validateLogin", userInfo).then(response => {
                    // console.log("----cas 登录--------",response);
                    if (response.success) {
                        const result = response.result
                        // const userInfo = result.userInfo
                        // Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
                        Vue.ls.set(ACCESS_TOKEN, result, 7 * 24 * 60 * 60 * 1000)
                        // Vue.ls.set(USER_NAME, userInfo.userName, 7 * 24 * 60 * 60 * 1000)
                        // Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
                        commit('SET_TOKEN', result)
                        // commit('SET_TOKEN', result.token)
                        // commit('SET_INFO', userInfo)
                        // commit('SET_NAME', { userName: userInfo.userName,realName: userInfo.realName, welcome: welcome() })
                        // commit('SET_AVATAR', userInfo.avatar)
                        resolve(response)
                    } else {
                        resolve(response)
                    }
                }).catch(error => {
                    reject(error)
                })
            })
        },
        // 登录
        Login({commit}, userInfo) {
            return new Promise((resolve, reject) => {
                let v_token = Vue.ls.get(ACCESS_TOKEN)
                login(userInfo).then(response => {
                    if (response.success === true) {
                        let result = response
                        if(!v_token){
                          result.setTime = new Date().getTime()
                          Vue.ls.set(ACCESS_TOKEN, result, 365 * 24 * 60 * 60 * 1000 )
                        }else {
                          v_token.access_token = result.access_token
                          Vue.ls.set(ACCESS_TOKEN, v_token, 365 * 24 * 60 * 60 * 1000 )
                        }
                        // const userInfo = result.userInfo
                        // Vue.ls.set(USER_NAME, userInfo.userName, 7 * 24 * 60 * 60 * 1000)
                        // Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
                        // Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
                        commit('SET_TOKEN', result)
                        // commit('SET_TOKEN', result.token)
                        // commit('SET_INFO', userInfo)
                        // commit('SET_NAME', { userName: userInfo.userName,realName: userInfo.realName, welcome: welcome() })
                        // commit('SET_AVATAR', userInfo.avatar)
                        resolve(response)
                    } else {
                        reject(response)
                    }
                }).catch(error => {
                    reject(error)
                })
            })
        },
        //手机号登录
        PhoneLogin({commit}, userInfo) {
            return new Promise((resolve, reject) => {
                phoneLogin(userInfo).then(response => {
                    if (response.code == '200') {
                        const result = response.result
                        const userInfo = result.userInfo
                        Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
                        Vue.ls.set(USER_NAME, userInfo.userName, 7 * 24 * 60 * 60 * 1000)
                        Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
                        Vue.ls.set(UI_CACHE_DB_DICT_DATA, result.sysAllDictItems, 7 * 24 * 60 * 60 * 1000)
                        commit('SET_TOKEN', result.token)
                        commit('SET_INFO', userInfo)
                        commit('SET_NAME', {userName: userInfo.userName, realName: userInfo.realName, welcome: welcome()})
                        commit('SET_AVATAR', userInfo.avatar)
                        resolve(response)
                    } else {
                        reject(response)
                    }
                }).catch(error => {
                    reject(error)
                })
            })
        },
        // 获取用户信息
        GetPermissionList({commit}) {
            return new Promise((resolve, reject) => {
                let v_token = Vue.ls.get(ACCESS_TOKEN);
                let params = {token: v_token.loginUserToken};
                queryPermissionsByUser(params).then(response => {
                    const menuData = response[0].result.functionList
                    const userInfo = response[1].result
                    const buttonData = response[0].result.buttonVos
                    Vue.ls.set(USER_NAME, userInfo.userName, 7 * 24 * 60 * 60 * 1000)
                    Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
                    commit('SET_INFO', userInfo)
                    commit('SET_NAME', { userName: userInfo.userName,realName: userInfo.realName, welcome: welcome() })
                    commit('SET_AVATAR', userInfo.avatar)
                    // const menuData = response.result.menu;
                    // const authData = response.result.auth||[];
                    // const allAuthData = response.result.allAuth||[];
                    // Vue.ls.set(USER_AUTH,authData);
                    // sessionStorage.setItem(USER_AUTH,JSON.stringify(authData));
                    // sessionStorage.setItem(SYS_BUTTON_AUTH,JSON.stringify(allAuthData));
                  if (buttonData!=undefined && buttonData!=''){
                    sessionStorage.setItem(SYS_BUTTON_AUTH,JSON.stringify(buttonData));
                  }
                    if (menuData && menuData.length > 0) {
                        //update--begin--autor:qinfeng-----date:20200109------for：JEECG-63 一级菜单的子菜单全部是隐藏路由，则一级菜单不显示------
                        menuData.forEach((item, index) => {
                            if (item["children"]) {
                                let hasChildrenMenu = (item["children"]).filter((i) => {
                                    // return !i.hidden || i.hidden == false
                                    return true
                                })
                                if (hasChildrenMenu == null || hasChildrenMenu.length == 0) {
                                    item["hidden"] = true
                                }
                            }
                        })
                        //console.log(" menu show json ", menuData)
                        //update--end--autor:qinfeng-----date:20200109------for：JEECG-63 一级菜单的子菜单全部是隐藏路由，则一级菜单不显示------
                        commit('SET_PERMISSIONLIST', menuData)
                    } else {
                        this.$notification.error({
                            message: 'Sorry！',
                            description: `you don't have permission to log in`,
                        });
                        reject('getPermissionList: permissions must be a non-null array !')
                    }
                    resolve(menuData)
                }).catch(error => {
                    reject(error)
                })
            })
        },

        // 登出
        Logout({commit, state}) {
            return new Promise((resolve) => {
                let logoutToken = state.token;
                commit('SET_TOKEN', '')
                commit('SET_PERMISSIONLIST', [])
                Vue.ls.remove(ACCESS_TOKEN)
                Vue.ls.remove(UI_CACHE_DB_DICT_DATA)
                //console.log('logoutToken: '+ logoutToken)
                logout(logoutToken).then(() => {
                    //let sevice = "http://"+window.location.host+"/";
                    //let serviceUrl = encodeURIComponent(sevice);
                    //window.location.href = window._CONFIG['casPrefixUrl']+"/logout?service="+serviceUrl;
                    resolve()
                }).catch(() => {
                    resolve()
                })
            })
        },
        // 第三方登录
        ThirdLogin({commit}, token) {
            return new Promise((resolve, reject) => {
                thirdLogin(token).then(response => {
                    if (response.code == '200') {
                        const result = response.result
                        const userInfo = result.userInfo
                        Vue.ls.set(ACCESS_TOKEN, result.token, 7 * 24 * 60 * 60 * 1000)
                        Vue.ls.set(USER_NAME, userInfo.userName, 7 * 24 * 60 * 60 * 1000)
                        Vue.ls.set(USER_INFO, userInfo, 7 * 24 * 60 * 60 * 1000)
                        commit('SET_TOKEN', result.token)
                        commit('SET_INFO', userInfo)
                        commit('SET_NAME', {userName: userInfo.userName, realName: userInfo.realName, welcome: welcome()})
                        commit('SET_AVATAR', userInfo.avatar)
                        resolve(response)
                    } else {
                        reject(response)
                    }
                }).catch(error => {
                    reject(error)
                })
            })
        },
        saveTenant({commit}, id) {
            Vue.ls.set(TENANT_ID, id, 7 * 24 * 60 * 60 * 1000)
            commit('SET_TENANT', id)
        }


    }
}

export default user
